﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Turnero.DAOs
{
    class TurnosBD:BaseDatos
    {
        public DataSet getTurnos(Int32 idPre)
        {
                      
           try
            {

                SqlCommand cmd = new SqlCommand("paDameTurnos", cn);
                cmd.Parameters.AddWithValue("@idPre", idPre); 
                cmd.Connection = ConectarDB();
                cmd.CommandType = CommandType.StoredProcedure;
                
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);

                da.Fill(ds, "turnos");
                return ds;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                cn.Close();
            }
        }

        internal bool guardarTurno(Entidades.Turno turno)
        {
            try
            {
                String query = "INSERT INTO Turnos (fechaTurno, horaInicio, minutoInicio, horaFin, minutoFin, dniPaciente, apellidoPaciente, nombrePaciente, " +
                               "tipoDoc, fechaNacimiento, sexo, domicilio, localidad, telefono, celular, mail, obraSocial, observaciones, idPaciente, idprofesional) " +
                               "values (@fechaTurno, @horaInicio, @minutoInicio, @horaFin, @minutoFin, @dniPaciente, @apellidoPaciente, @nombrePaciente, " +
                               "@tipoDoc, @fechaNacimiento, @sexo, @domicilio, @localidad, @telefono, @celular, @mail, @obraSocial, @observaciones, @idPaciente, @idprofesional)";

                SqlCommand cmd = new SqlCommand(query, ConectarDB());

                cmd.Parameters.AddWithValue("@fechaTurno", turno.FechaTurno);
                cmd.Parameters.AddWithValue("@horaInicio", turno.HoraInicio);
                cmd.Parameters.AddWithValue("@minutoInicio", turno.MinutoInicio);
                cmd.Parameters.AddWithValue("@horaFin", turno.HoraFIn);
                cmd.Parameters.AddWithValue("@minutoFin", turno.MinutoFin);
                cmd.Parameters.AddWithValue("@dniPaciente", turno.DniPaciente);
                cmd.Parameters.AddWithValue("@apellidoPaciente", turno.ApellidoPaciente);
                cmd.Parameters.AddWithValue("@nombrePaciente", turno.NombrePaciente);
                cmd.Parameters.AddWithValue("@tipoDoc", turno.TipoDoc);
                cmd.Parameters.AddWithValue("@fechaNacimiento", turno.FechaNacimiento);
                cmd.Parameters.AddWithValue("@sexo", turno.Sexo);
                cmd.Parameters.AddWithValue("@domicilio", turno.Domicilio);
                cmd.Parameters.AddWithValue("@localidad", turno.Localidad);
                cmd.Parameters.AddWithValue("@telefono", turno.Telefono);
                cmd.Parameters.AddWithValue("@celular", turno.Celular);
                cmd.Parameters.AddWithValue("@mail", turno.Mail);
                cmd.Parameters.AddWithValue("@obraSocial", turno.ObraSocial);
                cmd.Parameters.AddWithValue("@observaciones", turno.Observaciones);
                cmd.Parameters.AddWithValue("@idpaciente", turno.IdPaciente);
                cmd.Parameters.AddWithValue("@idProfesional", turno.IdProfesional);

                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }          
        }

        internal Int32 DameIdTurno(int idPre, string horaDesde, string minutosDesde, string dia)
        {
            try
            {
                Int32 horaInicio = Convert.ToInt32(horaDesde);
                DateTime diaTurno = Convert.ToDateTime(dia);

                SqlCommand cmd = new SqlCommand("paDameIdTurno", cn);
                cmd.Parameters.AddWithValue("@idPre", idPre);
                cmd.Parameters.AddWithValue("@horaDesde", horaInicio);
                cmd.Parameters.AddWithValue("@minutosDesde", minutosDesde);
                cmd.Parameters.AddWithValue("@dia", diaTurno);

                cmd.Connection = ConectarDB();
                cmd.CommandType = CommandType.StoredProcedure;

                SqlDataReader dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    return dr.GetInt32(0);
                }
                return 0;
                
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                cn.Close();
            }
        }

        internal Entidades.Turno DameDatosTurnoPorId(int idTurno)
        {
            Entidades.Turno turno = new Entidades.Turno();
            String query = "paDameDatosTurnoPorId";
            SqlCommand cmd = new SqlCommand(query, ConectarDB());
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@idTurno", idTurno);
            SqlDataReader dr = cmd.ExecuteReader();


            while (dr.Read())
            {
                turno.IdTurno = dr.GetInt32(0);
                turno.FechaTurno = dr.GetDateTime(1);
                turno.HoraInicio = dr.GetInt32(2);
                turno.MinutoInicio = dr.GetString(3);
                turno.HoraFIn = dr.GetInt32(4);
                turno.MinutoFin = dr.GetString(5);
                turno.DniPaciente = dr.GetString(6);
                turno.NombrePaciente = dr.GetString(7);
                turno.ApellidoPaciente = dr.GetString(8);
                turno.TipoDoc = dr.GetString(9);
                turno.FechaNacimiento = dr.GetDateTime(10);
                turno.Sexo = dr.GetString(11);
                turno.Domicilio = dr.GetString(12);
                turno.Localidad = dr.GetInt32(13);
                turno.Telefono = dr.GetString(14);
                turno.Celular = dr.GetString(15);
                turno.Mail = dr.GetString(16);
                turno.ObraSocial = dr.GetString(17);
                turno.Observaciones = dr.GetString(18);
                turno.IdPaciente = dr.GetInt32(19);
                turno.IdProfesional = dr.GetInt32(20);

            }

            dr.Close();
            cmd.Connection.Close();

            return turno;

        }

        internal bool BorrarTurno(int idTurno)
        {
            try
            {
                String query = "DELETE from Turnos where idTurno = @idTurno";
                SqlCommand cmd = new SqlCommand(query, ConectarDB());

                cmd.Parameters.AddWithValue("@idTurno", idTurno);
                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        internal bool actualizarTurno(Entidades.Turno turno)
        {
            try
            {
                String query = "UPDATE Turnos set dniPaciente = @dniPaciente, apellidoPaciente = @apellidoPaciente, nombrePaciente = @nombrePaciente, " +
                               "tipoDoc = @tipoDoc, fechaNacimiento = @fechaNacimiento, sexo = @sexo, domicilio = @domicilio, localidad = @localidad, telefono = @telefono, celular = @celular, mail = @mail, obraSocial = @obraSocial, observaciones = @observaciones, idPaciente = @idPaciente, idprofesional = @idprofesional where idTurno = @idTurno";

                SqlCommand cmd = new SqlCommand(query, ConectarDB());

                cmd.Parameters.AddWithValue("@idTurno", turno.IdTurno);
                cmd.Parameters.AddWithValue("@dniPaciente", turno.DniPaciente);
                cmd.Parameters.AddWithValue("@apellidoPaciente", turno.ApellidoPaciente);
                cmd.Parameters.AddWithValue("@nombrePaciente", turno.NombrePaciente);
                cmd.Parameters.AddWithValue("@tipoDoc", turno.TipoDoc);
                cmd.Parameters.AddWithValue("@fechaNacimiento", turno.FechaNacimiento);
                cmd.Parameters.AddWithValue("@sexo", turno.Sexo);
                cmd.Parameters.AddWithValue("@domicilio", turno.Domicilio);
                cmd.Parameters.AddWithValue("@localidad", turno.Localidad);
                cmd.Parameters.AddWithValue("@telefono", turno.Telefono);
                cmd.Parameters.AddWithValue("@celular", turno.Celular);
                cmd.Parameters.AddWithValue("@mail", turno.Mail);
                cmd.Parameters.AddWithValue("@obraSocial", turno.ObraSocial);
                cmd.Parameters.AddWithValue("@observaciones", turno.Observaciones);
                cmd.Parameters.AddWithValue("@idpaciente", turno.IdPaciente);
                cmd.Parameters.AddWithValue("@idProfesional", turno.IdProfesional);

                cmd.ExecuteNonQuery();
                cmd.Connection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        internal int buscarTiempoEntreTurnos(Entidades.Profesional pr)
        {
            try
            {
               

                SqlCommand cmd = new SqlCommand("paBuscarTiempoEntreTurnos", cn);
                cmd.Parameters.AddWithValue("@idPre", pr.Cod);
               
                cmd.Connection = ConectarDB();
                cmd.CommandType = CommandType.StoredProcedure;

                SqlDataReader dr = cmd.ExecuteReader();

                if (dr.Read())
                {
                    return dr.GetInt32(0);
                }
                return 0;

            }
            catch (Exception)
            {

                return 0;
            }
            finally
            {
                cn.Close();
            }
        }

        internal int dameCantTurnos(int idPre, string dia, string horaDesde, string minutosDesde)
        {
            try
            {
                Int32 cant;
                SqlCommand cmd = new SqlCommand("paDameCantTurnos", cn);
                cmd.Parameters.AddWithValue("@idPre", idPre);
                cmd.Parameters.AddWithValue("@fechaTurno", Convert.ToDateTime(dia));
                cmd.Parameters.AddWithValue("@horaInicio", Convert.ToInt32(horaDesde));
                cmd.Parameters.AddWithValue("@minutoInicio", minutosDesde);

                cmd.Connection = ConectarDB();
                cmd.CommandType = CommandType.StoredProcedure;

                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());
                

                return dt.Rows.Count;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                cn.Close();
            }
        }

        internal bool validaDia(Int32 idProfesional, Int32 idDia, Int32 horaInicio)
        {
            try
            {

                SqlCommand cmd = new SqlCommand("paValidaDiaYHoraTurno", cn);
                cmd.Parameters.AddWithValue("@idProfesional", idProfesional);
                cmd.Parameters.AddWithValue("@idDia", idDia);
                cmd.Parameters.AddWithValue("@horaInicio", horaInicio);
                

                cmd.Connection = ConectarDB();
                cmd.CommandType = CommandType.StoredProcedure;

                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());

                if (dt.Rows.Count > 0)
                    return true;
                else
                    return false;
            }
            catch (Exception)
            {

                throw;
            }
            finally
            {
                cn.Close();
            }
        }
    }
}
